package org.akomantoso.core.visitor;

import org.akomantoso.core.data.*;

/**
 * @author <a href="mailto:jacques.militello@gmail.com">Jacques Militello</a>
 */
public interface AKVisitor {

	// Document Type
	boolean visitBegin(AmendmentList amendmentList);

	boolean visitBegin(OfficialGazette officialGazette);

	boolean visitBegin(Doc doc);

	boolean visitBegin(Debate debate);

	boolean visitBegin(DebateReport debateReport);

	boolean visitBegin(DocumentCollection documentCollection);

	boolean visitBegin(Bill bill);

	boolean visitBegin(Act act);

	boolean visitBegin(Judgement judgement);

	boolean visitBegin(Amendment amendment);

	boolean visitBegin(Document document);

	void visitEnd(AmendmentList amendmentList);

	void visitEnd(OfficialGazette officialGazette);

	void visitEnd(Doc doc);

	void visitEnd(Debate debate);

	void visitEnd(DebateReport debateReport);

	void visitEnd(DocumentCollection documentCollection);

	void visitEnd(Bill bill);

	void visitEnd(Act act);

	void visitEnd(Judgement judgement);

	void visitEnd(Amendment amendment);

	void visitEnd(Document document);

	// HTMLinline
	boolean visitBegin(I i);

	boolean visitBegin(A a);

	boolean visitBegin(B b);

	boolean visitBegin(U u);

	boolean visitBegin(Sub sub);

	boolean visitBegin(Sup sup);

	boolean visitBegin(Span span);

	void visitEnd(I i);

	void visitEnd(A a);

	void visitEnd(B b);

	void visitEnd(U u);

	void visitEnd(Sub sub);

	void visitEnd(Sup sup);

	void visitEnd(Span span);

	// HTMLblock
	boolean visitBegin(P p);

	boolean visitBegin(Ol ol);

	void visitEnd(P p);

	void visitEnd(Ol ol);

	// ANhier
	boolean visitBegin(Chapter chapter);

	boolean visitBegin(SubChapter subChapter);

	boolean visitBegin(Section section);

	boolean visitBegin(SubSection subSection);

	boolean visitBegin(Paragraph paragraph);

	boolean visitBegin(SubParagraph subParagraph);

	boolean visitBegin(Part part);

	boolean visitBegin(Point point);

	boolean visitBegin(Clause clause);

	boolean visitBegin(Article article);

	void visitEnd(Chapter chapter);

	void visitEnd(SubChapter subChapter);

	void visitEnd(Section section);

	void visitEnd(SubSection subSection);

	void visitEnd(Paragraph paragraph);

	void visitEnd(SubParagraph subParagraph);

	void visitEnd(Part part);

	void visitEnd(Point point);

	void visitEnd(Clause clause);

	void visitEnd(Article article);

	// HierElement
	boolean visitBegin(Hcontainer hcontainer);

	void visitEnd(Hcontainer hcontainer);

	// ANtitleInline
	boolean visitBegin(Session session);

	boolean visitBegin(Legislature legislature);

	boolean visitBegin(DocCommittee docCommittee);

	boolean visitBegin(DocProponent docProponent);

	boolean visitBegin(DocIntroducer docIntroducer);

	boolean visitBegin(DocNumber docNumber);

	boolean visitBegin(DocTitle docTitle);

	boolean visitBegin(DocketNumber docketNumber);

	boolean visitBegin(DocType docType);

	boolean visitBegin(DocDate docDate);

	void visitEnd(Session session);

	void visitEnd(Legislature legislature);

	void visitEnd(DocCommittee docCommittee);

	void visitEnd(DocProponent docProponent);

	void visitEnd(DocIntroducer docIntroducer);

	void visitEnd(DocNumber docNumber);

	void visitEnd(DocTitle docTitle);

	void visitEnd(DocketNumber docketNumber);

	void visitEnd(DocType docType);

	void visitEnd(DocDate docDate);

	// SpeechSection
	boolean visitBegin(Adjournment adjournment);

	boolean visitBegin(AdministrationOfOath administrationOfOath);

	boolean visitBegin(Communication communication);

	boolean visitBegin(DebateSection debateSection);

	boolean visitBegin(OralStatements oralStatements);

	boolean visitBegin(Prayers prayers);

	boolean visitBegin(RollCall rollCall);

	void visitEnd(Adjournment adjournment);

	void visitEnd(AdministrationOfOath administrationOfOath);

	void visitEnd(Communication communication);

	void visitEnd(DebateSection debateSection);

	void visitEnd(OralStatements oralStatements);

	void visitEnd(Prayers prayers);

	void visitEnd(RollCall rollCall);

	// ANinline
	boolean visitBegin(Del del);

	boolean visitBegin(Ins ins);

	boolean visitBegin(Mmod mmod);

	boolean visitBegin(Mref mref);

	boolean visitBegin(Mod mod);

	boolean visitBegin(Omissis omissis);

	boolean visitBegin(Remark remark);

	boolean visitBegin(Ref ref);

	void visitEnd(Del del);

	void visitEnd(Mmod mmod);

	void visitEnd(Ins ins);

	void visitEnd(Mref mref);

	void visitEnd(Mod mod);

	void visitEnd(Omissis omissis);

	void visitEnd(Remark remark);

	void visitEnd(Ref ref);

	// ANsemanticInline
	boolean visitBegin(Location location);

	boolean visitBegin(Person person);

	boolean visitBegin(Term term);

	boolean visitBegin(Organization organization);

	boolean visitBegin(Judge judge);

	boolean visitBegin(Entity entity);

	boolean visitBegin(Def def);

	boolean visitBegin(Date date);

	void visitEnd(Location location);

	void visitEnd(Person person);

	void visitEnd(Term term);

	void visitEnd(Organization organization);

	void visitEnd(Judge judge);

	void visitEnd(Entity entity);

	void visitEnd(Def def);

	void visitEnd(Date date);

	// ANcontainers
	boolean visitBegin(Scene scene);

	boolean visitBegin(Narrative narrative);

	boolean visitBegin(Summary summary);

	void visitEnd(Scene scene);

	void visitEnd(Narrative narrative);

	void visitEnd(Summary summary);

	// AmendmentInline
	boolean visitBegin(AffectedDocument affectedDocument);

	boolean visitBegin(Change change);

	void visitEnd(AffectedDocument affectedDocument);

	void visitEnd(Change change);

	// PrefaceContainers
	boolean visitBegin(LongTitle longTitle);

	boolean visitBegin(Formula formula);

	void visitEnd(LongTitle longTitle);

	void visitEnd(Formula formula);

	// BlockElements
	boolean visitBegin(Block block);

	void visitEnd(Block block);

	// ANheaderInline
	boolean visitBegin(Party party);

	void visitEnd(Party party);

	//
	boolean visitBegin(Recital recital);

	void visitEnd(Recital recital);

	boolean visitBegin(Header header);

	void visitEnd(Header header);

	// for Amendment
	boolean visitBegin(AmendmentBody amendmentBody);

	boolean visitBegin(AmendmentJustification amendmentJustification);

	boolean visitBegin(AmendmentHeading amendmentHeading);

	boolean visitBegin(AmendmentReference amendmentReference);

	boolean visitBegin(AmendmentContent amendmentContent);

	void visitEnd(AmendmentBody amendmentBody);

	void visitEnd(AmendmentJustification amendmentJustification);

	void visitEnd(AmendmentHeading amendmentHeading);

	void visitEnd(AmendmentReference amendmentReference);

	void visitEnd(AmendmentContent amendmentContent);

	// JUdgment
	boolean visitBegin(JudgementBody judgementBody);

	boolean visitBegin(Decision decision);

	boolean visitBegin(Introduction introduction);

	boolean visitBegin(Background background);

	boolean visitBegin(Motivation motivation);

	void visitEnd(Decision decision);

	void visitEnd(JudgementBody judgementBody);

	void visitEnd(Introduction introduction);

	void visitEnd(Background background);

	void visitEnd(Motivation motivation);

	// Collection Structure
	boolean visitBegin(Interstitial interstitial);

	void visitEnd(Interstitial interstitial);

	// Common structure
	boolean visitBegin(Meta meta);

	boolean visitBegin(CoverPage coverPage);

	boolean visitBegin(Preface preface);

	boolean visitBegin(Conclusions conclusions);

	void visitEnd(Meta meta);

	void visitEnd(Preface preface);

	void visitEnd(CoverPage coverPage);

	void visitEnd(Conclusions conclusions);

	//
	boolean visitBegin(Item item);

	void visitEnd(Item item);

	// no content tag
	void visit(Publication publication);

	void visit(Img img);

	void visit(StringItem stringItem);

	// EolType
	void visit(Eop eop);

	void visit(Eol eol);

	void visit(ComponentRef componentRef);

	boolean visitBegin(From from);

	void visitEnd(From from);

	boolean visitBegin(Note note);

	void visitEnd(Note note);

	boolean visitBegin(Heading heading);

	void visitEnd(Heading heading);

	boolean visitBegin(Caption caption);

	void visitEnd(Caption caption);

	boolean visitBegin(Container container);

	void visitEnd(Container container);

	boolean visitBegin(SubHeading subHeading);

	void visitEnd(SubHeading subHeading);

	boolean visitBegin(QuotedStructure quotedStructure);

	void visitEnd(QuotedStructure quotedStructure);

	boolean visitBegin(Content content);

	void visitEnd(Content content);

	boolean visitBegin(CollectionBody collectionBody);

	void visitEnd(CollectionBody collectionBody);

	boolean visitBegin(Num num);

	void visitEnd(Num num);

	boolean visitBegin(TocItem tocItem);

	void visitEnd(TocItem tocItem);

	boolean visitBegin(Li li);

	void visitEnd(Li li);

	boolean visitBegin(Citation citation);

	void visitEnd(Citation citation);

	// AN popup
	boolean visitBegin(AuthorialNote authorialNote);

	void visitEnd(AuthorialNote authorialNote);

	boolean visitBegin(Popup popup);

	void visitEnd(Popup popup);

}